package com.atguigu.gmall.order.controller;

import com.atguigu.gmall.common.bean.ResponseVo;
import com.atguigu.gmall.common.exception.GmallAsyncException;
import com.atguigu.gmall.common.exception.GmallException;
import com.atguigu.gmall.oms.vo.OrderConfirmVo;
import com.atguigu.gmall.oms.vo.OrderSubmitVo;
import com.atguigu.gmall.order.interceptor.UserInfoInterceptor;
import com.atguigu.gmall.order.service.OrderService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

@Controller
@RequestMapping
@Slf4j
public class OrderController {
    @Autowired
    OrderService orderService;
    //创建订单
    /*
    异步访问的接口：
            成功返回ResponseVo.ok()
            失败返回ResponseVo.fail() :前端根据失败的状态码 处理异常进行提示或者页面跳转
    同步请求访问的接口：
            后端可以捕获异常重定向到失败页面
     */
    //创建订单
    @ResponseBody
    @PostMapping("submit")
    public ResponseVo submit(@RequestBody OrderSubmitVo orderSubmitVo){
       // log.info("orderSubmitVo：{}" ,orderSubmitVo);
        try {
            String token = orderService.createOrder(orderSubmitVo);
//            int i = 1/0;
            return ResponseVo.ok(token);
        } catch (Exception e) {
            throw new GmallAsyncException(e.getMessage());
        }
    }

    //展示用户要购买的商品列表信息:未创建订单
    @GetMapping("confirm")
    public String confirm(Model model){
        /*
        只要获取到用户的id 就可以获取订单确认页需要的所有的数据：
            获取当前已登录用户的购物车中选中的购物项  代表用户要购买的商品列表
            页面还需要展示用户个人信息
         */
            OrderConfirmVo confirmVo = orderService.confirm();
            model.addAttribute("confirmVo",confirmVo);
            return "trade";
    }

}
